package qc.module.ehs.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import qc.common.core.unify.QCUnifyReturnValue;
import qc.common.core.utils.IdentifierUtil;
import qc.module.ehs.entity.EhsHazardPreventrecord;
import qc.module.ehs.repository.EhsHazardPreventrecordRepository;

import java.util.Date;
import java.util.List;

/**
 * 危险源防控记录信息Service
 *
 * @author QuCheng Tech
 * @create 2024/6/28
 */
@Service
public class EhsHazardPreventrecordService {
    
    @Autowired
    private EhsHazardPreventrecordRepository repository;

    /**
     * 新增危险源防控记录信息
     * 
     * @param entity
     * @return 成功返回null，失败返回错误或提示信息
     * @author QuCheng Tech
     * @since 2024/6/28
     */
    public String addRecord(EhsHazardPreventrecord entity){
        if (entity == null) return QCUnifyReturnValue.Warn("新增对象不能为空");
        
        if (StringUtils.isBlank(entity.getRecordid())) entity.setRecordid(IdentifierUtil.randomUUID());
        
        if (repository.insert(entity) < 0x1){
            return QCUnifyReturnValue.Warn("保存失败");
        }
        return QCUnifyReturnValue.Success();
    }

    /**
     * 更新危险源防控记录信息
     * 
     * @param entity
     * @return 成功返回null，失败返回错误或提示信息
     * @author QuCheng Tech
     * @since 2024/7/3
     */
    public String updateRecord(EhsHazardPreventrecord entity,Integer type){
        if (entity == null) return QCUnifyReturnValue.Warn("对象不能为空");

        LambdaUpdateWrapper<EhsHazardPreventrecord> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(EhsHazardPreventrecord::getHazardid,entity.getHazardid());
        wrapper.eq(EhsHazardPreventrecord::getType,type);
        wrapper.eq(EhsHazardPreventrecord::getTmtype,entity.getTmtype());
        wrapper.ge(EhsHazardPreventrecord::getTmbegin, entity.getTmbegin());
        wrapper.le(EhsHazardPreventrecord::getTmend,entity.getTmend());
        
        repository.update(entity,wrapper);
        return QCUnifyReturnValue.Success();
    }

    /**
     * 批量删除指定危险源ID的危险源记录
     * @param hazardIds 危险源ID集合
     * @return 成功返回null，失败返回错误或提示信息
     * @author QuCheng Tech
     * @since 2024/7/1
     */
    public String batchDeleteRecords(List<String> hazardIds){
        repository.deleteBatchIds(hazardIds);
        return QCUnifyReturnValue.Success();
    }

    /**
     * 删除指定危险源指定防控开始、截止时间、指定类型的记录
     * 
     * @param hazardId 危险源ID
     * @param type 防控措施类型
     * @param begintm 防控开始时间
     * @param endtm 防控截止时间
     * @return 成功返回null，失败返回错误或提示信息
     * @author QuCheng Tech
     * @since 2024/7/1
     */
    public String deleteRecords(String hazardId, Integer type, Date begintm, Date endtm,Integer tmtype){
        LambdaQueryWrapper<EhsHazardPreventrecord> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(EhsHazardPreventrecord::getHazardid,hazardId);
        wrapper.eq(EhsHazardPreventrecord::getType, type);
        wrapper.ge(EhsHazardPreventrecord::getTmbegin,begintm);
        wrapper.le(EhsHazardPreventrecord::getTmend,endtm);
        wrapper.eq(EhsHazardPreventrecord::getTmtype,tmtype);
        
        repository.delete(wrapper);
        return QCUnifyReturnValue.Success();
    }

    /**
     * 获取指定危险源ID集合指定周期的防控记录
     * 
     * @param hazardIds 危险源ID集合
     * @param type 防控措施类型
     * @param begintm 防控开始时间
     * @param endtm 防控截止时间
     * @param tmtype 时间范围类型
     * @return List<EhsHazardPreventrecord>
     * @author QuCheng Tech
     * @since 2024/7/2
     */
    public List<EhsHazardPreventrecord> getRecords(List<String> hazardIds,Integer type,Date begintm, Date endtm,Integer tmtype){
        LambdaQueryWrapper<EhsHazardPreventrecord> wrapper = new LambdaQueryWrapper<>();
        if (CollectionUtils.isNotEmpty(hazardIds)) 
            wrapper.in(EhsHazardPreventrecord::getHazardid,hazardIds);
        wrapper.eq(EhsHazardPreventrecord::getType, type);
        if (begintm != null) wrapper.ge(EhsHazardPreventrecord::getTmbegin,begintm);
        if (endtm != null) wrapper.le(EhsHazardPreventrecord::getTmend,endtm);
        wrapper.eq(EhsHazardPreventrecord::getTmtype,tmtype);
        
        return repository.selectList(wrapper);
    }

    /**
     * 获取指定危险源指定周期防控记录
     * 
     * @param hazardId 危险源ID
     * @param type 防控措施类型
     * @param begintm 防控开始时间
     * @param endtm 防控结束时间
     * @param tmtype 时间范围类型
     * @return EhsHazardPreventrecord
     * @author QuCheng Tech
     * @since 2024/7/4
     */
    public EhsHazardPreventrecord getOneRecord(String hazardId,Integer type,Date begintm, Date endtm,Integer tmtype){
        LambdaQueryWrapper<EhsHazardPreventrecord> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(EhsHazardPreventrecord::getHazardid,hazardId);
        wrapper.eq(EhsHazardPreventrecord::getType, type);
        wrapper.eq(EhsHazardPreventrecord::getTmtype,tmtype);
        if (begintm != null) wrapper.ge(EhsHazardPreventrecord::getTmbegin,begintm);
        if (endtm != null) wrapper.le(EhsHazardPreventrecord::getTmend,endtm);

        return repository.selectOne(wrapper);
    }
    
}
